package ca.etsmtl.log120.tp3.rangs;

import ca.etsmtl.log120.tp3.cartes.Denomination;
import ca.etsmtl.log120.tp3.mains.Main;
import ca.etsmtl.log120.tp3.mains.RangPoker;

/******************************************************
Cours : LOG120
Session : E2011
Groupe : 01
Projet : Laboratoire #3
Etudiants : Nicolas Blais Miko
 	 		Yohan Trepanier-Montpetit
Codes perm. : BLAN24079109
			  TREY16079108
Professeur : Chamseddine Talhi
Charge de labo : Eric Goulet
Nom du fichier : ListeAnalyseurs.java
Date cree : 2011-07-06
Date dern. modif. 2011-07-06
*************************************************** ****
Historique des modifications
*************************************************** ****

***************************************************/

/**
 * Classe representant tous les rangs de poker qui sont analysable 
 */
public abstract class AbstractRangAnalysable extends RangPoker{

	/**
	 * Methode permettant de reconnaitre si la main a le rang de la methode implementee
	 * @param main La main que l'on veut veridier
	 * @return Vrai si la main est reconnue, faux sinon
	 */
	public abstract boolean reconnaitreMain(Main main);
	
	/**
	 * Methode retournant la premiere denomination a comparer pour une comparaison entre deux rangs egaux
	 * ex.: La plus haute denomination d'une main couleur ou la denomination de la paire pour une main paire
	 * @return La premiere denomination a comparer
	 */
	public abstract Denomination getTopDenomination();
	
	/**
	 * Methode retournant un clone de l'objet ou ceci est implemente
	 */
	public abstract AbstractRangAnalysable clone();
	
	/**
	 * Methode qui determine le reste des denominations a comparer pour chaque rang
	 * @param main La main
	 */
	public abstract void determineResteMain(Main main);
	
	/**
	 * Accesseur du reste de la main pour la comapraison lorsque necessaire
	 */
	public abstract Denomination[] getResteMain();
}
